using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using FiltronASP.Logger;

namespace FiltronASP.Models.DAO.Filtron
{
    public class FiltronFilterEngineCommentsDAO : Abstracts.AbstractGenericDAO<FiltronFilterEngineComment, System.Nullable<int>>,
        Interfaces.Filtron.IFiltronFilterEngineCommentsDAO
    {
        protected override string GetKeyProperty()
        {
            return "filter_id";
        }

        /// <summary>
        /// Pobieranie obiektow na podstawie identyfikatora powiązania silnika-filtra.
        /// </summary>
        /// <param name="engineId">silnik-filtr</param>
        /// <returns>rekordy o zadanym silniku lub null, gdy nie ma</returns>
        public IQueryable<FiltronFilterEngineComment> FindByFilterEngineId(int filterEngineId)
        {
            if (filterEngineId.Equals(0))
            {
                return null;
            }   //if
            try
            {
                IQueryable<FiltronFilterEngineComment> filters = this._cmsEntitiesDataContext.FiltronFilterEngineComments.Where(
                            fien => fien.filter_engine_id.Equals(filterEngineId)
                        );
                if (!(filters.Any()))
                {
                    return null;
                }   //if
                return filters;
            }   //try
            catch (Exception ex)
            {
                MyLogger.Log(ex);
            }   //catch
            return null;
        }

        /// <summary>
        /// Pobieranie obiektow na podstawie identyfikatora powiązania silnika-filtra, 
        /// ograniczone tylko do tych, które mają wyłącznie opis (bez daty).
        /// </summary>
        /// <param name="engineId">filtr-silnik</param>
        /// <returns>rekordy o zadanym silniku lub null, gdy nie ma</returns>
        public IQueryable<FiltronFilterEngineComment> FindByFilterEngineIdOnlyDescription(int filterEngineId)
        {
            if (filterEngineId.Equals(0))
            {
                return null;
            }   //if
            try
            {
                IQueryable<FiltronFilterEngineComment> filters = this._cmsEntitiesDataContext.FiltronFilterEngineComments.Where(
                            fien => (fien.filter_engine_id.Equals(filterEngineId)) && (fien.filter_info_description.Length == -2) &&
                                (fien.filter_info_years.Length < 2)
                        );
                if (!(filters.Any()))
                {
                    return null;
                }   //if
                return filters;
            }   //try
            catch (Exception ex)
            {
                MyLogger.Log(ex);
            }   //catch
            return null;
        }

        public IQueryable<FiltronFilterEngineComment> FindByFilterEngineIdOnlyDate(int filterEngineId)
        {
            if (filterEngineId.Equals(0))
            {
                return null;
            }   //if
            try
            {
                IQueryable<FiltronFilterEngineComment> filters = this._cmsEntitiesDataContext.FiltronFilterEngineComments.Where(
                            fien => (fien.filter_engine_id.Equals(filterEngineId)) && (fien.filter_info_years.Length == -2) &&
                                (fien.filter_info_description.Length < 2)
                        );
                if (!(filters.Any()))
                {
                    return null;
                }   //if
                return filters;
            }   //try
            catch (Exception ex)
            {
                MyLogger.Log(ex);
            }   //catch
            return null;
        }


        public IQueryable<FiltronFilterEngineComment> FindByFilterEngineIdDescAndYear(int filterEngineId)
        {
            if (filterEngineId.Equals(0))
            {
                return null;
            }   //if
            try
            {
                IQueryable<FiltronFilterEngineComment> filters = this._cmsEntitiesDataContext.FiltronFilterEngineComments.Where(
                            fien => (fien.filter_engine_id.Equals(filterEngineId))
                        );
                if (!(filters.Any()))
                {
                    return null;
                }   //if
                return filters;
            }   //try
            catch (Exception ex)
            {
                MyLogger.Log(ex);
            }   //catch
            return null;
        }

        /// <summary>
        /// Pobieranie obiektow na podstawie identyfikatora powiązania silnika-filtra, 
        /// ograniczone tylko do tych, które mają wyłącznie opis (bez daty).
        /// </summary>
        /// <param name="engineId">filtr-silnik</param>
        /// <returns>rekordy o zadanym silniku lub null, gdy nie ma</returns>
        public IQueryable<FiltronFilterEngineComment> FindByFilterEngineIdAndDate(int filterEngineId, string infoYears)
        {
            if (filterEngineId.Equals(0))
            {
                return null;
            }   //if
            try
            {
                IQueryable<FiltronFilterEngineComment> filters = this._cmsEntitiesDataContext.FiltronFilterEngineComments.Where(
                            fien => (fien.filter_engine_id.Equals(filterEngineId)) && (fien.filter_info_years.ToLower().Contains(infoYears.ToLower())) &&
                                (fien.filter_info_description.Length < 2)
                        );
                if (!(filters.Any()))
                {
                    return null;
                }   //if
                return filters;
            }   //try
            catch (Exception ex)
            {
                MyLogger.Log(ex);
            }   //catch
            return null;
        }

        /// <summary>
        /// Pobieranie obiektow na podstawie identyfikatora powiązania silnika-filtra, 
        /// ograniczone tylko do tych, które mają wyłącznie opis (bez daty).
        /// </summary>
        /// <param name="engineId">filtr-silnik</param>
        /// <returns>rekordy o zadanym silniku lub null, gdy nie ma</returns>
        public IQueryable<FiltronFilterEngineComment> FindByFilterEngineIdAndDesc(int filterEngineId, string description)
        {
            if (filterEngineId.Equals(0))
            {
                return null;
            }   //if
            try
            {
                IQueryable<FiltronFilterEngineComment> filters = this._cmsEntitiesDataContext.FiltronFilterEngineComments.Where(
                            fien => (fien.filter_engine_id.Equals(filterEngineId))
                        );
                if (!(filters.Any()))
                {
                    return null;
                }   //if
                return filters;
            }   //try
            catch (Exception ex)
            {
                MyLogger.Log(ex);
            }   //catch
            return null;
        }

        /// <summary>
        /// Pobieranie obiektow na podstawie identyfikatora powiązania silnika-filtra, 
        /// ograniczone tylko do tych, które mają wyłącznie opis (bez daty).
        /// </summary>
        /// <param name="engineId">filtr-silnik</param>
        /// <returns>rekordy o zadanym silniku lub null, gdy nie ma</returns>
        public IQueryable<FiltronFilterEngineComment> FindByFilterEngineIdAndDescOnly(int filterEngineId, string description)
        {
            if (filterEngineId.Equals(0))
            {
                return null;
            }   //if
            try
            {
                IQueryable<FiltronFilterEngineComment> filters = this._cmsEntitiesDataContext.FiltronFilterEngineComments.Where(
                            fien => (fien.filter_engine_id.Equals(filterEngineId)) && (fien.filter_info_description.ToLower().Contains(description.ToLower())) &&
                                (fien.filter_info_years.Length < 2)
                        );
                if (!(filters.Any()))
                {
                    return null;
                }   //if
                return filters;
            }   //try
            catch (Exception ex)
            {
                MyLogger.Log(ex);
            }   //catch
            return null;
        }

    }
}
